

#include "chat_data_json_config.h"

#define CHAT_CFG_PATH "game_data/chat_data/chat.json"



	chat_data_json_config::chat_data_json_config()
	{
	}
	chat_data_json_config* chat_data_json_config::instance_p = 0;
	chat_data_json_config* chat_data_json_config::instance(void)
	{
		if( NULL == instance_p )
		{
			instance_p = new chat_data_json_config;
		}
		return instance_p;
	}

	chat_data_json_config::~chat_data_json_config()
	{
	}

	/**/
	int chat_data_json_config::load_chat_data_cfg( vector<chat_data>& data, const char* root )
	{
		data.clear();
		string tmp_str = root;
		string path_str;
		if( tmp_str.compare("") )
			path_str = string(root) + "/" + CHAT_CFG_PATH;
		else
			path_str = CHAT_CFG_PATH;
		ifstream fin(path_str.c_str());
		if (!fin)
		{
			cout << "file[" << path_str.data() << "] " << " open error!" << endl;
			return -1;
		}

		Json::Reader reader;
		Json::Value root_value;
		if (!reader.parse(fin, root_value))
		{

			cout << "file[" << path_str.data() << "] " << "failed![" << reader.getFormatedErrorMessages().c_str() << "]" << endl;
			return -1;
		}
		fin.close();

		chat_data c;
		string json_str = "";
		unsigned int i = 1;
		for(Json::Value::iterator it = root_value.begin(); it != root_value.end(); ++it){
			c.set_id( i++ );


			json_str = ((*it)["name"]).asString().data();
			if (!json_str.empty())
			{
				c.set_name( json_str.c_str() );

			}

			Json::Value &v_contion = ((*it)["contion"]);
	/*		if (!v_contion.empty())
			{
				string contion_str = v_contion.asString();
				game_element_vec_t   ge_vec;		
				game_element_parse_str(contion_str, ge_vec);
				c.set_chat_consume(ge_vec);
			}*/
			json_str = ((*it)["sleep_time"]).asString();
			c.set_sleep_time( json_str.empty() ? 0 : ::atoi(json_str.data()) );

			json_str = ((*it)["max_word_num"]).asString();
			c.set_max_word_num( json_str.empty() ? 0 : ::atoi(json_str.data()) );

			json_str = ((*it)["vip_max_word_num"]).asString();
			c.set_max_word_num( json_str.empty() ? 0 : ::atoi(json_str.data()) );

			json_str = ((*it)["level_limit"]).asString();
			c.set_level_limit( json_str.empty() ? 0 : ::atoi(json_str.data()) );

			data.push_back(c);
			//cout << *it <<endl;
		}
		return 0;
	}

/*	int chat_data_json_config::game_element_parse_str( const string& cmd_str, game_element_vec_t& game_cmd_vec )
	{
		game_cmd_vec.clear();
		string stringproc_str = cmd_str;

#ifdef OS_LINUX
		stringproc_str = trim( stringproc_str );
#endif
#ifdef OS_WINDOWS
		stringproc_str.erase( remove_if( stringproc_str.begin( ), stringproc_str.end( ), ptr_fun( isspace ) ), stringproc_str.end( ) );
#endif

		game_cmd_vec.clear();
		//find command
		int fst_idx = 0; int scd_idx = 0;
		fst_idx = stringproc_str.find("(");
		scd_idx = stringproc_str.find(")");
		string fsttmp_str,c_str;fsttmp_str.clear();


		if( (unsigned int)scd_idx > stringproc_str.size() )
			return 1;

		c_str = stringproc_str.substr(0,fst_idx);

		game_element ge;
		ge.set_command(c_str.data());

		fsttmp_str.clear();
		fsttmp_str= stringproc_str.substr(fst_idx + 1, scd_idx - fst_idx -1 );

		game_element_para( fsttmp_str, ge );

		game_cmd_vec.push_back(ge);	


		return 0;
	}

	int chat_data_json_config::game_element_para( const string& cell_str, game_element &ge )
	{
		string stringproc_str = cell_str;

		//find element
		int fst_idx = 0; int scd_idx = 0;
		fst_idx = stringproc_str.find(",");
		string fsttmp_str;fsttmp_str.clear();
		string cmd_str; cmd_str.clear();

		if( (unsigned int)scd_idx > stringproc_str.size() )
			return 1;

		fsttmp_str.clear();
		cmd_str = stringproc_str.substr(0,fst_idx);
		fsttmp_str= stringproc_str.substr(fst_idx+1 , stringproc_str.size() - 1);
		vector<string> string_vec;
		string_vec.push_back( cmd_str );
		string_vec.push_back( fsttmp_str );

		ge.set_para_str_list(string_vec);

		vector<int> data_vec; data_vec.clear();
		vector<string>::iterator its = string_vec.begin();

		for(  ;its != string_vec.end(); ++its)
		{
			data_vec.push_back( atoi((*its).data()));
		}
		ge.set_para_list(data_vec);

		return 0;
	}*/











